{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据的预处理\n",
    "讨论应当采用哪些预处理步骤，让数据更加适合挖掘。数据预处理是一个广泛的领域，包含大量以复杂得方式相关联的不同策略和技术。我们讨论一些最重要的思想和方法，并试图指出它们之间的相互联系。具体的说，我们将讨论如下主题：\n",
    "\n",
    "　　　　聚集\n",
    "\n",
    "　　　　抽样\n",
    "\n",
    "　　　　维归约\n",
    "\n",
    "　　　　特征子集选择\n",
    "\n",
    "　　　　特征创建\n",
    "\n",
    "　　　　离散化和二元化\n",
    "\n",
    "　　　　变量变换\n",
    "\n",
    "粗略的说，这些项目分为两类，即选择分析所需要的数据对象和属性以及创建改变属性。这两种情况的目标都是改善数据挖掘分析工作，减少时间，降低成本和提高质量。\n",
    "\n",
    "1.聚集\n",
    "有时，“少就是多”，而聚集就是如此。聚集将两个或多个对象合并成单个对象。考虑一个由事务组成的数据集，它记录一年中不同日期在各地商店的商品日销售情况。如下表，对该数据集的事务进行聚集的一种方法，是用一个商店事务替换该商店的所有事务。这把每天出现在一个商店的成百上千个事务记录归约成单个日事务，而数据对象的个数减少为商店的个数。\n",
    "\n",
    "聚集的动机有多种。首先，数据归约导致的较小数据集需要较少的内存和处理时间，因此可以使用开销更大的数据挖掘算法。其次，通过高层而不是底层数据视图，聚集起到了范围或标度转换的作用。在前面的例子中，在商店位置和月份上的聚集给出数据按月、按商店，而不是按天、按商品的视图。最后，对象或属性群的行为通常比单个对象或属性的行为更加稳定。这反映了统计学事实：相对于被聚集的单个对象，诸如平均值、总数等聚集量具有较小的变异性。对于总数，实际变差大于单个对象的变差，但是变差的百分比较小；而对于均值，实际变差小于单个对象的变差。聚集的缺点是可能丢失有趣的细节。在商店的例子中，按月的聚集就丢失了星期几具有最高销售额的信息。\n",
    "\n",
    "2.抽样\n",
    "抽样是一种选择数据对象子集进行分析的常用方法。在统计学中，抽样长期用于数据的事先调查和最终的数据分析。在数据挖掘中，抽样也非常有用。然而，在统计学和数据挖掘中，抽样的动机并不相同。统计学使用抽样是因为感兴趣的整个数据集的费用太高、太费时间，而数据挖掘使用抽样是因为处理所有的数据的费用太高、太费时间。在某些情况下，使用抽样的算法可以压缩数据量，以便可以使用更好但开销较大的数据挖掘算法。\n",
    "\n",
    "有效抽样的主要原理如下：如果样本是有代表性的，则使用样本与使用数据集的效果几乎一样，而样本是由代表性的。前提是它近似地具有与元数据集相同的性质。如果数据对象的均值是感兴趣的性质，而样本具有近似于原始数据集的均值，则样本就是有代表性的。由于抽样是一个统计过程，特定样本的代表性是变化的。因此我们所能做的最好的抽样方案就是选择一个确保以很高的概率得到有代表性的样本。如下所述，这设计选择适当的样本容量和抽样技术。\n",
    "\n",
    "3.维归约\n",
    "数据集可能包含大量特征。考虑一个文档的集合，其中每个文档是一个向量，其分量是文档中出现的每个词的频率。在这种情况下，通常有成千上万的属性（分量），每个代表词汇表中的一个词。再看一个例子，考虑包含过去30年各种股票日收盘价的时间序列数据集。在这种情况下，属性也是特定天的价格，也数以千计。\n",
    "\n",
    "维归约有多方面的好处。关键好处是，如果维度较低，许多数据挖掘算法的效果就会更好。这一部分是因为维归约可以删除不想管的特征并降低噪声，一部分是因为维灾难。（维灾难在下面解释）。另一个好处是维归约可以使模型更容易理解，因为模型可能只涉及较少的属性。此外，维归约也可以更容易让数据可视化。即使维归约没有将数据归约到二维或者三维，数据也可以通过观察属性对或三元组属性达到可视化，并且这种组合的数目也会大大减少。最后，使用维归约降低了数据挖掘算法的时间和内存需求。\n",
    "\n",
    "4.特征子集选择\n",
    "降低维度的另一种方法是仅使用特征的一个子集。尽管看来这种方法可能丢失信息，但是在存在冗余或不相关的特征的时候，情况并非如此。冗余特征重复了包含在一个或多个其他属性中的许多或所有信息。例如，一种产品的购买价格和所支付的销售税额包含许多相同的信息。不想管特征包含对于手头的数据挖掘任务几乎完全没用的信息，例如学生的ID号码对于预测学生的总平均成绩是不相关的。冗余和不相关的特征可能降低分类的准确率，影响所发现的聚类的质量。\n",
    "\n",
    "尽管使用常识或领域知识可以立即消除一些不相关的和冗余的属性，但是选择最佳的特征子集通常需要系统的方法。特征选择的理想方法是：将所有可能的特征子集作为感兴趣的数据挖掘算法的输入，然后选取产生最好结果的子集。这种方法的优点是反映了最终使用的数据挖掘算法的目的和偏爱。然而，由于涉及n个属性的子集多大2的n次方个，这种方法在大部分情况下行不通，因此需要其他策略。有三种标准的特征选择方法：嵌入、过滤和包装。\n",
    "\n",
    "嵌入方法（embedded approach）　　特征选择作为数据挖掘算法的一部分是理所当然的。特别是在数据挖掘算法运行期间，算法本身决定使用哪些属性和忽略哪些属性。构造决策树分类器的算法通常以这种方式运行。\n",
    "\n",
    "过滤方法（filter approach）　　使用某种独立于数据挖掘任务的方法。在数据挖掘算法运行前进行特征选择。例如我们可以选择属性的集合，它的属性对之间的相关度尽可能低。\n",
    "\n",
    "包装方法（wrapper approach）　　这些方法将目标数据挖掘算法作为黑盒，使用类似于前面介绍的理想算法，但通常并不枚举所有可能的子集来找出最佳属性子集。\n",
    "\n",
    "5.特征创建\n",
    "常常可以由原来的属性创建新的属性集，更有效地捕获数据集中的重要信息。此外，新属性的数目可能比原属性少，使得我们可以获得前面介绍的维归约带来的所有好处。下面介绍三种创建新属性的相关方法：特征提取、映射数据到新的空间和特征构造。\n",
    "\n",
    "5.1 特征提取\n",
    "由原始数据创建新的特征集称作特征提取（featur extraction）。考虑照片的集合，按照照片是否包含人脸分类。原始数据是像素的集合，因此对于许多分类算法都不合适。然而，如果对数据进行处理，提供一些较高层次的特征，诸如与人脸相关的某些类型的边和区域等，则会有更多的分类技术可以用于该问题。\n",
    "\n",
    "　　可是吗，最常使用的特征提取技术都是高度针对具体领域的。对于特定的领域，如图像处理，在过去一段时间已经开发了各种特征和提取特征的技术，但是这些技术在其他领域的应用却是有限的。因为，一旦数据挖掘用于一个相对较新的领域，一个关键任务就是开发新的特征和特征提取方法。\n",
    "\n",
    "5.2 映射数据到新的空间\n",
    "使用一种完全不同的视角挖掘数据可能揭示出重要和有趣的特征。例如，考虑时间序列数据，它们常常包含周期模式。如果只有单个周期模式，并且噪声不多，则容易检测到该模式；另一方面，如果有大量周期模式，并且存在大量噪声，则很难检测这些模式。尽管如此，通过对该时间序列实施傅里叶变换（Fourier transform），将它转换成频率信息明显的表示，就能检测到这些模式。在下面的例子中，不必知道傅里叶变换的细节，只需要知道对于时间序列，傅里叶变换产生其属性与频率有关的新数据对象就足够。\n",
    "\n",
    "6.离散化和二元化\n",
    "有些数据挖掘算法，特别是某些分类算法，要求数据是分类属性形式。发现关联模式的算法要求数据是二元属性形式。这样，常常需要将连续属性变换成分类属性（离散化，discretization），并且连续和离散属性可能都需要变换成一个或多个二元属性（二元化，binarization）。此外，如果一个分类属性具有大量不通知（类别），或者某些值出现不频繁，则对于某些数据挖掘任务，通过合并某些值减少类别的数目可能是有益的。\n",
    "\n",
    "与特征选择一样，最佳的离散化和二元方法是“对于用来分析数据的数据挖掘算法，产生最好结果”的方法。直接使用这种判别标准通常是不实际的。因此，离散化和二元化一般要满足这样一种判别标准，它与所考虑的数据挖掘任务的性能好坏直接相关。\n",
    "\n",
    "7.变量变换\n",
    "变量变换（variable transformation）是指用于变量的所有值得变换。换言之，对于每个对象，变换都作用域该对象的变量值。例如，如果只考虑变量的两级，则可以通过取绝对值对变量进行变换。接下来的部分，我们讨论两种重要的变量变换类型：简单函数变换和规范化。\n",
    "\n",
    "7.1 简单函数\n",
    "对于这种类型的变量变换，一个简单函数分别作用域每一个值。如果x是变量，这种变换的例子包括。在统计学中，变量变换（特别是平方根、对数和倒数变换）长用来将不具有高斯（正态）分布的数据变换成具有高斯（正态）分布的数据。尽管这可能很重要，但是在数据挖掘中，其他理由可能更重要。假定感兴趣的变量是一次绘画中的数据字节数，并且字节数的值域范围为1到10亿。这是一个很大的值域，使用常用对数变黄将其进行压缩可能是有益的。这样的话，传输10^8和10^9字节的会话比传说10字节和1000字节的绘画更为相似（9-8=1掉3-1=2）。对于某些应用，如网络入侵检测，可能需要如此，因为前两个会话多半表示传输两个大文件，而后两个会话可能是两个完全不同的类型。\n",
    "\n",
    "使用变量变换时需要小心，因为它们改变了数据的特性。尽管有时需要这样做，但是如果变换的特性没有深入理解，则可能出现问题。例如，变换1/x虽然压缩了大于1的值，但是却放大了0和1之间的值。为了帮助弄清楚一个变换的效果，重要的是要问如下问题：需要保序吗？变换作用于所有的值，特别是负值和0值吗？变换对0和1之间的值有何特别影响？\n",
    "\n",
    "7.2 规范化或标准化\n",
    "另一种常见的变量变换类型是变量的标准化（standardization）或规范化（normalization）。在数据挖掘中，这两个属于常常互换。然而，在统计学中，术语规范化可能与使变量正态（高斯）的变换相混淆。标准化或规范化的目标是使整个值的集合具有特定的性质。一个传统的例子是统计学中的“对变量标准化”。如果x是属性值的均值，而Sx是它们的标准差，则变换创建一个新的变量，它具有均值0和标准差1。如果要以某种方法组合不同的变量，则为了避免具有较大值域的变量左右计算结果，这种变换常常是必须的。例如，考虑使用年龄和收入两个变量对人进行比较。对于任意两个人，收入之差的绝对值多半比年龄之差的绝对值大很多。如果没有考虑到年龄和收入值域的差别，则对人的比较将被收入之差所左右。例如，如果两个人之间的相似性或相异性使用本章后面的相似度或相异性度量来计算，则在很多情况下（如欧几里得距离）收入值将左右计算结果。\n",
    "\n",
    "均值和标准差受离群点的影响很大，因此通常需要修改上述变换。首先，用中位数（median）取代均值，其次，用绝对标准差（absolute standard deviation）取代标准差。例如，如果x是变量，则x的绝对标准差为，其中xi是变量x的第i个值，m是对象的个数，而μ是均值或中位数。存在离群点时，计算值集的位置（中心）和发散估计的其他方法分别在3.2.3和3.2.4节介绍。这些度量可以用来定义标准化变换。\n",
    "\n",
    "四、相似性和相异性的度量\n",
    "相似性和相异性是重要的概念。因为它们被许多数据挖掘技术所使用。如聚类、最近邻分类和异常检测等。在许多情况下，一旦计算出相似性或相异性，就不再需要原始数据了。这种方法可以看做将数据变换到相似性（相异性）空间，然后进行分析。\n",
    "\n",
    "首先，讨论基本要素---相似性和相异性的高层定义，并讨论它们之间的联系。为方便起见，使用术语邻近度表示相似性或相异性。由于两个对象之间的邻近度是两个对象对应属性之间的邻近度的函数，因此我们首先介绍如何度量仅包含一个简单属性的对象之间的邻近度，然后考虑具有多个属性的对象的邻近度度量。这包括相关和欧几里得距离度量，以及Jaccard和余弦相似度量。前二者适用于时间序列这样的稠密数据或二维点。后二者适用于像文档这样的稀疏数据\n",
    "\n",
    "1.基础\n",
    "1.1 定义\n",
    "两个对象之间的相似度（similarity）的非正式定义是这两个对象相似程度的数值度量。因而，两个对象越相似，它们的相似度就越高。通常相似度是非负的，并常常在0（不相似）和1（完全相似）之间取值。\n",
    "\n",
    "两个对象之间的相异度（dissimilarity）是这两个对象差异程度的数值度量。对象越类似，它们的相异度就越低。通常，术语距离（distance）用作相异度的同义词，正如我们介绍的，距离常常用来表示特定类型的相异度。有时，相异度在区间[0,1]中取值，但是相异度在0和∞之间取值也很常见。\n",
    "\n",
    "1.2 变换\n",
    "通常使用变换把相似度转换成相异度或相反，或者把邻近度变换到一个特定区间，如[0,1]。例如，我们可能有相似度，其值域从1到10，但是我们打算使用的特定算法或软件只能处理相异度，或只能处理[0,1]区间的相似度。之所以在这里讨论这些问题，是因为在稍后讨论邻近度时，我们将使用这种变换。此外，这些问题相对独立于特定的邻近度度量。\n",
    "\n",
    "通常，邻近度度量（特别是相似度）被定义为或变换到区间[0,1]中的值。这样做的动机是使用一种适当的尺度，由邻近度的值表明两个对象之间的相似程度。这种变换通常是比较直接了当的。例如，如果对象之间的相似度在1和10之间变换，则我们可以使用如下变换将它变换到[0,1]区间：s'=(s-1)/9，其中s和s'分别是相似度的原值和心智。一般来说，相似度到[0,1]区间的变换由如下表达式给出：s'=(s-min_S)/(max_S-min_S)，其中max_S和min_S分别是相似度的最大值和最小值。类似地，具有有限值域的相异度也能用d'=(d-min_D)/(max_D-min_D)映射到[0,1]区间。\n",
    "\n",
    "然而，将邻近度映射到[0,1]区间可能非常复杂。例如，如果邻近度度量原来在区间[0,∞]上取值，则需要使用非线性变换，并且在新的尺度上，值之间不再具有相同的联系。对于从0变化到∞的相异度度量，考虑变换d'=d/(1+d)，相异度0、0.5、2、10、100和1000分别被变换到0、0.33、0.67、0.90、0.99和0.999。在原来相异性尺度上较大的值被压缩到1附近，但是否希望如此取决于应用。另一个问题是邻近度度量的含义可能会被改变。例如，相关性是一种相似性度量，在区间[-1,1]上取值，通过取绝对值将这些映射到[0,1]区间丢失了符号信息，而对于某些应用，符号信息可能是重要的。\n",
    "\n",
    "将相似度变换成相异度或相反也是比较直截了当的，尽管我们可能再次面临保持度量的含义问题和将现行尺度改变成非线性尺度的问题。如果相似度落在[0,1]区间，则相异度可以定义为d=1-s。另一种简单方法是定义相似度为负的相异度。例如相异度0,1,10和100可以变换成相似度0，-1，-10和-100。\n",
    "\n",
    "一般来说，任何单调函数都可以用来将相异度转换到相似度。当然，在将相似度变换到相异度，或者在将邻近度的值变换到新的尺度时，也必须考虑一些其他因素，我们提到过一些问题，设计保持意义、扰乱标度和数据分析工具的需要，但是肯定还有其他问题。\n",
    "\n",
    "2.简单属性之间的相似度和相异度\n",
    "具有若干属性的对象之间的邻近度用单个属性的邻近度的组合来定义，因此我们首先讨论具有单个属性的对象之间的邻近度。考虑由一个标称属性描述的对象，对于两个这样的对象，相似意味什么呢？由于标称属性只携带了对象的相异性信息，因此我们只能说两个对象有相同的值或者没有。因而在这种情况下，如果属性值匹配，则相似度定义为1，否则为0；相异度用相反的方法定义：如果属性值匹配，相异度为0，否则为1。\n",
    "\n",
    "对具有单个序数属性的对象，情况更为复杂。因为必须考虑序信息。考虑一个在标度{poor,fair,OK,good,wonderful}上2测量产品质量的属性。一个评定为wonderful的产品P1与一个评定为good的产品P2应当比它与一个评定为OK的产品P3更接近，为了量化这种观察，序数属性的值常常映射到从0或1开始的相继整数，例如{poor=0,fair=1,OK=2,good=3,wonderful=4}。于是，P1和P2之间的之间的相似度d(P1,P2)=3-2=1，或者，如果我们希望相异度在0和1之间取值，d(P1,P2)=(3-2)/4=0.25；序数属性的相似度可以定义为s=1-d。\n",
    "\n",
    "序数属性相似度的这种定义可能使人感到有点担心。因为这里我们定义了相等的区间，而事实并非如此。如果根据实际情况，我们应该计算出区间或比率属性。值fair和good的差真和ok与wonderful的差相同吗？可能不相同，但是在实践中，我们的选择是有限的，并且在缺乏更多信息的情况下，这是定义序数属性之间邻近度的标准方法。\n",
    "\n",
    "对于区间或比率属性，两个对象之间的相异性的自然度量是它们的值之差的绝对值。例如，可能将现在的体重与一年前的体重相比较，说“中了10磅”。在这类情况下，相异度通常在0和∞之间，而不是0和1之间取值。\n",
    "\n",
    "如下表总结了这些讨论。在该标中，x和y是两个对象，它们具有一个指明类型的属性，d(x,y)和s(x,y)分别是x和y之间的相异度和相似度（分别用d和s表示）。其他方法也是可能的，但是表中的这些是最常用的。\n",
    "\n",
    "下面谅解介绍更复杂的涉及多个属性的对象之间的邻近性度量：（1）数据对象之间的相异度；（2）数据对象之间的相似度。这样分节可以更自然地展示使用各种邻近度度量的基本动机，然而，我们要强调的是使用上述技术，相似度可以变换成相异度，反之亦然"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
